该 HIP 生态系统 被设计为一个轻量级抽象层,旨在实现 AMD 与 NVIDIA 架构之间的源代码兼容性。它利用了 ROCm(Radeon 开源计算) 堆栈,特别是利用了 异构系统架构(HSA) 运行时和 内核融合驱动程序(KFD)。
1. 初始化启动
初始化始于通过 hsa_init(0, ...) 和 hsaKmtOpenKFD(...)的底层内核驱动握手操作。这些调用建立了用户空间应用程序与 AMD GPU 硬件之间的通信桥梁。
2. 拓扑与属性发现
在启动内核之前,运行时使用 hsaKmtAcquireSystemProperties 和 hsaKmtGetNodeProperties来识别硬件功能。它通过使用 hsaKmtMapMemoryToGPUNodes将物理内存映射到 GPU 节点,确保设备的页表可见性。
3. 编译流程
CUDA 与 HIP 之间的桥梁建立在两大支柱之上: hipify-perl (基于正则表达式的转换器)以及 hipcc (编译器包装器)。
# 迁移工作流示例
hipify-perl square.cu > square.cpp
hipcc square.cpp -o square.out
hipify-perl square.cu > square.cpp
hipcc square.cpp -o square.out
4. 版本管理逻辑
通过精确的公式强制保证 hipRuntimeGetVersion 与 HSA 扩展表对齐:
$$\text{HIP\_VERSION} = \text{MAJOR} \times 10^7 + \text{MINOR} \times 10^5 + \text{PATCH}$$
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>